Decadal Strategic & Technical Plan 2026–2035 (Sentinel v2.4 / Omni-Sentinel Mesh v4.0 / SCP v3.0)#139
Decadal Strategic & Technical Plan 2026–2035 (Sentinel v2.4 / Omni-Sentinel Mesh v4.0 / SCP v3.0)#139OneFineStarstuff wants to merge 5 commits into
Conversation
|
The files' contents are under analysis for test generation. |
|
Review these changes at https://app.gitnotebooks.com/OneFineStarstuff/OneFineStarstuff.github.io/pull/139 |
❌ Deploy Preview for onefinestarstuff failed.
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Sorry @OneFineStarstuff, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
View changes in DiffLens |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR adds a decadal governance blueprint, updates the roadmap and pilot-gate workflow, extends runnable assurance with OSCAL conformance checks, and hardens the Next.js app with authenticated sessions, request validation, rate limiting, signed consent events, and route-level enforcement. ChangesGovernance Blueprint, Roadmap, Pilot Gates, and Assurance
Next.js Security Hardening and Dashboard Remediation
Sequence Diagram(s)sequenceDiagram
participant Client
participant Middleware
participant Session as session.ts
participant Route as API route
participant Guard as readJson/sanitizeForStream
Client->>Middleware: request to /api/*
Middleware->>Session: derive client key and enforce limit
Client->>Route: authenticated request
Route->>Guard: parse body / sanitize stream
Guard-->>Route: validated data or structured error
Estimated code review effort🎯 5 (Critical) | ⏱️ ~90 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
|
Overall Grade |
Security Reliability Complexity Hygiene |
Code Review Summary
| Analyzer | Status | Updated (UTC) | Details |
|---|---|---|---|
| Python | Jun 25, 2026 12:47p.m. | Review ↗ | |
| JavaScript | Jun 25, 2026 12:47p.m. | Review ↗ | |
| Shell | Jun 25, 2026 12:47p.m. | Review ↗ |
Important
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| Compatibility | 1 high |
| BestPractice | 2 medium |
| Documentation | 4 minor |
| ErrorProne | 4 high |
| Security | 1 critical |
| CodeStyle | 86 minor |
| Complexity | 1 medium |
| Performance | 1 medium |
🟢 Metrics 106 complexity · 2 duplication
Metric Results Complexity 106 Duplication 2
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
|
View changes in DiffLens |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md (1)
65-83: 💤 Low valueAdd a language identifier to the ASCII diagram code block.
Line 65 opens a fenced code block for the architecture diagram. Adding a language identifier (e.g.,
text` orascii`) improves markdown linting compliance and readability.✨ Proposed fix
### 2. Architecture overview (the four control planes) -``` +```text ┌──────────────────────────────────────────────────────────────────────────────────┐ │ SCP v3.0 — Unified AI Supervisory Control Plane (supervisor-facing) │🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md` around lines 65 - 83, The ASCII architecture diagram code block starting at line 65 does not have a language identifier in its opening fence. Add a language identifier such as `text` or `ascii` immediately after the opening triple backticks (e.g., change the opening fence from ``` to ```text) to improve markdown linting compliance and readability of the diagram block.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md`:
- Around line 65-102: Two Tier A artifacts referenced in the
component-to-artifact-to-evidence map are missing from the repository:
tla/SentinelContainmentProtocol.tla and tla/KillSwitchAbstract.tla. These files
are cited as having verifiable TLC model-checking evidence (75 + 13 states with
no errors) for the containment one-way ratchet and kill-switch abstraction
control components. Either create and add these TLA+ files to the repository
with the corresponding TLC verification results, or update the table rows
referencing these files to remove them and correct the Tier A evidence claims to
match what actually exists in the repository.
- Around line 397-412: The "Full assurance suite" row in the verification ledger
section claims "11/11 PASS" but the actual execution of bash
governance_artifacts/run_runnable_assurance.sh fails at the OPA policy tests
step because OPA is not installed. Update the "Last result" column for the "Full
assurance suite" row to reflect the actual failure output (e.g., "FAIL: opa:
command not found" or similar), or alternatively ensure all required
dependencies including OPA, TLC, terraform, node, and python3 packages are
properly installed and available in the environment so the command can execute
successfully and produce the claimed result. Verify that all other commands in
the verification ledger table also execute correctly and produce their claimed
outputs before updating their results.
---
Nitpick comments:
In `@governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md`:
- Around line 65-83: The ASCII architecture diagram code block starting at line
65 does not have a language identifier in its opening fence. Add a language
identifier such as `text` or `ascii` immediately after the opening triple
backticks (e.g., change the opening fence from ``` to ```text) to improve
markdown linting compliance and readability of the diagram block.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: d24fab33-4acc-4150-98d5-389a2fd351e2
📒 Files selected for processing (1)
governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md
|
View changes in DiffLens |
Update — follow-on hardening (commit 8892373)Three concrete follow-ups, all verified: 1. Roadmap phases 5–8 promoted to first-class
2. Runnable 2028 pilot acceptance-gate checklist
3. Dashboard High-severity findings closed (DASH-01/02/03/05/08)
Regression: |
|
View changes in DiffLens |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
next-app/app/api/consent/route.ts (1)
36-36: 🧹 Nitpick | 🔵 Trivial | 💤 Low valueRedundant type cast.
new Date().toISOString()already returnsstring, so theas unknown as stringcast is unnecessary.- ts: new Date().toISOString() as unknown as string, + ts: new Date().toISOString(),🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@next-app/app/api/consent/route.ts` at line 36, The ts property assignment in the consent route includes a redundant type cast `as unknown as string` after calling `new Date().toISOString()`. Since the toISOString() method already returns a string type, the explicit cast is unnecessary and should be removed. Simply replace the line to use `ts: new Date().toISOString()` without any type annotations.next-app/app/api/intent/route.ts (1)
18-21: 🧹 Nitpick | 🔵 Trivial | 💤 Low valueConsider rejecting empty message for consistency.
The chat route rejects empty strings with
message.length === 0, but this route only checkstypeof message !== 'string'. An empty string would pass validation and return'casual'. While not harmful, aligning validation behavior across routes aids maintainability.- if (typeof message !== 'string') { + if (typeof message !== 'string' || message.length === 0) {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@next-app/app/api/intent/route.ts` around lines 18 - 21, The message validation in the intent route only checks for type but not for empty strings, whereas the chat route validates for empty strings using message.length === 0. Add an additional validation check after the typeof validation for the message variable to reject empty strings and return a 400 response with an appropriate error message, ensuring consistency with the chat route's validation behavior.governance_artifacts/pilot/run_pilot_acceptance_gates.py (1)
107-118: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winUnused variable in tuple unpacking.
Line 109 unpacks
rcfrom the_run()return value but never uses it. The return code is ignored in favor of checking the output text for"No error has been found".Consider using
_to indicate the value is intentionally ignored.♻️ Proposed fix
def check_containment_tlc() -> tuple[bool, str]: jar = GA / "tla" / "tools" / "tla2tools.jar" - rc, out = _run( + _, out = _run( ["java", "-cp", str(jar), "tlc2.TLC", "-config", str(GA / "tla" / "SentinelContainmentProtocol.cfg"), str(GA / "tla" / "SentinelContainmentProtocol.tla")], timeout=300, )🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@governance_artifacts/pilot/run_pilot_acceptance_gates.py` around lines 107 - 118, In the check_containment_tlc() function, the return code variable rc is unpacked from the _run() call but never used since the function only checks the output text for error messages. Replace rc with an underscore (_) in the tuple unpacking statement to indicate the value is intentionally ignored and follows Python convention for unused variables.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@governance_artifacts/pilot/run_pilot_acceptance_gates.py`:
- Line 28: The os module is imported at the top of the
run_pilot_acceptance_gates.py file but is never used anywhere in the script.
Remove the import os statement to clean up unused imports and improve code
clarity.
In `@governance_blueprint/roadmap_2026_2035.yaml`:
- Around line 70-117: The validator function `validate_roadmap_2035_shape()` in
governance_blueprint/validation/validate_artifacts.py accumulates validation
errors throughout its execution but fails to return them, instead returning None
implicitly. Add a `return errors` statement at the end of the function after
line 299 to ensure that accumulated validation errors are properly propagated to
the caller and validation failures are correctly reported instead of silently
passing.
---
Nitpick comments:
In `@governance_artifacts/pilot/run_pilot_acceptance_gates.py`:
- Around line 107-118: In the check_containment_tlc() function, the return code
variable rc is unpacked from the _run() call but never used since the function
only checks the output text for error messages. Replace rc with an underscore
(_) in the tuple unpacking statement to indicate the value is intentionally
ignored and follows Python convention for unused variables.
In `@next-app/app/api/consent/route.ts`:
- Line 36: The ts property assignment in the consent route includes a redundant
type cast `as unknown as string` after calling `new Date().toISOString()`. Since
the toISOString() method already returns a string type, the explicit cast is
unnecessary and should be removed. Simply replace the line to use `ts: new
Date().toISOString()` without any type annotations.
In `@next-app/app/api/intent/route.ts`:
- Around line 18-21: The message validation in the intent route only checks for
type but not for empty strings, whereas the chat route validates for empty
strings using message.length === 0. Add an additional validation check after the
typeof validation for the message variable to reject empty strings and return a
400 response with an appropriate error message, ensuring consistency with the
chat route's validation behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 59df18ae-d3a2-4487-bca9-8b1e3502da69
📒 Files selected for processing (11)
governance_artifacts/pilot/README.mdgovernance_artifacts/pilot/run_pilot_acceptance_gates.pygovernance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.mdgovernance_blueprint/roadmap_2026_2035.yamlnext-app/DASHBOARD_SECURITY_REVIEW.mdnext-app/__tests__/dashboard_security_review.test.tsnext-app/app/api/chat/stream/route.tsnext-app/app/api/consent/route.tsnext-app/app/api/intent/route.tsnext-app/lib/auth/session.tsnext-app/lib/http/guard.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md
|
View changes in DiffLens |
…6-2035 Authoritative consolidation of Sentinel v2.4 / Omni-Sentinel Mesh v4.0 / SCP v3.0 program. Every technical claim anchored to a runnable, verified in-repo artifact (11/11 assurance checks green), with A/B/C/D feasibility tiering and an explicit integrity statement that ASI containment is control discipline, not a safety proof. Covers: zero-trust TEE architecture (TDX/SEV-SNP + vTPM PCR_MATCH); confidential enclave deployment + remote attestation; StaR-MoE (SARA+ACR) routing stabilization; telemetry attestation + G-SRI; PQC WORM (ML-DSA-65/Dilithium/SPHINCS+ + Kafka/S3 Object Lock); zk systemic-risk proofs (Circom/Groth16 -> zk-STARK migration) + zk-SNARK/zk-STARK relayer pipelines; OSCAL 1.1.2 + OPA/Rego compliance-as-code with mappings to EU AI Act/Annex IV, NIST AI RMF, ISO/IEC 42001, Basel III/IV, DORA, NIS2, GDPR Art.22, MAS/HKMA FEAT, FCA SMCR, ECOA, ICGC/GASO; TLA+ SentinelContainmentProtocol + SIP v3.0 invariants; HSM + Terraform multi-region enclaves; GIEN/SIP v3.0 federated collective defense; security-review patterns (Solidity/OPA/React); 24h monitor + integrity checks; zkML transition-validity; OmegaActual dead-man's switch; DevSecOps/ GitOps (ArgoCD/Flux); 6-month 2028 G-SIFI pilot; supervisory adoption model; KPIs/KRIs; phased roadmap through 2035 (consistent with roadmap_2026_2035.yaml); verification ledger. All cross-referenced artifacts confirmed present; roadmap YAML parses (5 phases + 4 ext).
… gates, close dashboard High findings
- Roadmap YAML: promoted extension entries to first-class segments phase_5..phase_8
(2031-2035), each with feasibility_tier, objectives, exit_criteria, and gating
preconditions for the Tier C/D phases. 9 phases total; YAML parses clean.
- Pilot: governance_artifacts/pilot/run_pilot_acceptance_gates.py operationalizes
decadal-plan section 14 as a runnable checklist. Executes the 6 Tier-A gates
(terraform validate, OPA gates, PQC WORM tamper, containment TLC, zk relayer,
full assurance) and reports 6 Tier-B/hardware gates as PENDING-EVIDENCE with
precise criteria (never faked). Current: 6/6 automated gates PASS. + README.
- Dashboard security: closed DASH-01/02/03/05/08.
* lib/auth/session.ts - HMAC-signed tokens; principal derived server-side only
(Bearer/cookie), constant-time sig check, expiry enforced; canAccessSubject authz.
* lib/http/guard.ts - 16 KiB body cap + safe JSON parse; SSE/log-injection sanitizer.
* consent route: identity bound to authenticated principal (no body userId);
export requires ownership or dpo role (IDOR closed).
* chat stream route: authn + body cap; unauthenticated GET text-gen removed;
moderation 'block' now ENFORCED (suppresses reply); SSE values sanitized.
* intent route: authn + body cap + validation.
* tests rewritten to assert FIXED behaviour: vitest 14/14 pass (11 security + 3 gov).
* DASHBOARD_SECURITY_REVIEW.md status table updated (Resolved/Open).
* My new files typecheck clean (0 TS errors); pre-existing repo TS errors untouched.
- Decadal plan: noted first-class phases 0-8 and the runnable pilot checklist.
Regression: run_runnable_assurance.sh still 11/11 PASS.
… pilot + dashboard tests Dashboard security — all 8 findings now resolved (was 5/8): - DASH-04: app/api/risk/scores returns synthetic:true + DEMO disclaimer so mock series can't be mistaken for an SR 11-7 model output. - DASH-06: next.config.js sets CSP + X-Content-Type-Options/X-Frame-Options/ Referrer-Policy/Permissions-Policy/HSTS; middleware.ts + lib/http/rateLimit.ts add per-client rate limiting (120 req/min) on /api/*. - DASH-07: consentLedger.ts signs each event hash (HMAC stand-in for the Dilithium/ML-DSA HSM signer), verifies the chain on export, and FAILS CLOSED on prevHash read errors (no silent new chain). Also fixed pre-existing invalid 'catch (e: Error)' TypeScript in this file. - Added app/api/auth/login/route.ts: demo login issuing a signed, HttpOnly, SameSite=Strict sentinel_session cookie via mintToken (real IdP/OIDC in prod). - Tests extended to assert the fixes: vitest 19/19 pass (16 security + 3 gov). New/modified files typecheck clean (0 TS errors). CI (.github/workflows/runnable-assurance.yml): - Install solc (contracts) so assurance steps 7 (zk relayer) + 10 (contract compile) actually run in CI; install Terraform 1.9.8 for the pilot IaC gate. - Add contract-logic pytest to unit tests. - Add '2028 pilot acceptance-gate checklist' step (6/6 automated gates). - Add separate 'dashboard-tests' job running next-app vitest. - Trigger on governance_blueprint/** and next-app/** too. Regression: run_runnable_assurance.sh 11/11 PASS; pilot 6/6 automated; vitest 19/19.
9b45e58 to
15d6734
Compare
|
View changes in DiffLens |
Round 2 update — all 8 dashboard findings resolved + CI wiredLatest commit Dashboard security — now 8/8 resolved (was 5/8):
CI (
Verification (all green before push):
Integrity note: ASI "containment" remains a control discipline, not a safety proof. Tier-B/hardware and Tier-C/D gates are reported as pending evidence with explicit criteria rather than asserted. |
|
View changes in DiffLens |
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/runnable-assurance.yml:
- Around line 101-118: The dashboard-tests job has two security issues that need
to be fixed. First, pin the actions/checkout and actions/setup-node action
references to specific commit hashes instead of the mutable version tags (v4) to
eliminate supply chain risk. Second, add persist-credentials: false to the
checkout step to prevent credential persistence and potential exposure of
repository credentials. These changes address the static analysis findings for
governance-critical workflows by removing mutable action references and
disabling unnecessary credential persistence.
- Around line 72-76: The hashicorp/setup-terraform action is referenced using a
mutable version tag (`@v3`) instead of an immutable commit hash, which introduces
supply chain security risk. Replace the `@v3` reference in the Set up Terraform
(for pilot IaC gate) step with a specific commit SHA to pin the action to an
immutable version. This ensures that the workflow always uses the exact same
code and prevents unexpected changes or potential compromises to the action.
In `@governance_artifacts/pilot/run_pilot_acceptance_gates.py`:
- Around line 229-237: The issue is that when the --json flag is provided, the
code outputs machine-readable JSON but then continues to print human-readable
banner text and report output, which breaks JSON parsing. To fix this, after
processing and outputting JSON data (which occurs around lines 248-277), check
the args.json flag and immediately return or exit if JSON mode is enabled,
preventing the banner text printed at lines 233-237 and any subsequent
human-readable output from being printed in the same run.
In `@governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md`:
- Around line 276-277: The security review status in the React dashboards
section at line 276 is outdated and conflicts with the PR's actual results.
Update the check count from "5/5" to "14/14" to reflect the passing dashboard
security tests achieved by this PR's hardening efforts. Additionally, update
lines 399-400 to indicate that DASH findings have been remediated and are no
longer open, rather than implying they remain outstanding. Ensure all language
describing the dashboard security status is consistent with the PR's stated
remediations and current test results.
In `@next-app/app/api/auth/login/route.ts`:
- Around line 15-25: The POST function in route.ts accepts client-provided roles
without validation, allowing privilege escalation where a user could request
privileged roles like "dpo". Instead of simply filtering roles by type,
implement an allowlist of explicitly permitted roles that users can assign to
themselves. Only include roles from the client request that match this
allowlist, and reject or ignore any attempts to assign privileged or sensitive
roles. This prevents the authorization bypass where clients can mint tokens with
elevated permissions.
In `@next-app/lib/http/rateLimit.ts`:
- Around line 48-51: The clientKey function is using the first value from the
x-forwarded-for header as the rate limiting key, which is spoofable and allows
clients to rotate arbitrary keys to evade throttling. To fix this, modify the
logic to use a more trusted client IP source, such as taking the last value from
the x-forwarded-for header split (since the rightmost value is added by the most
recent proxy and is harder to spoof) instead of the first value, or prioritize a
more trusted header source. Ensure the rate limiter keys are derived from a
source that cannot be easily manipulated by end users.
In `@next-app/lib/privacy/consentLedger.ts`:
- Around line 49-50: The userId is used directly in path construction without
sanitization in the chainFile assignment, creating a path traversal
vulnerability where values like `../` could escape DATA_DIR. Sanitize the userId
parameter before using it in the path.join call by validating it contains only
safe characters or using path.basename to extract just the filename component.
Apply this same sanitization fix at both locations where this pattern appears
(the chainFile assignment and the other location at line 76-77).
- Around line 79-85: The current verification logic using
events.every(verifyEvent) only validates individual event signatures but does
not verify chain linkage. You need to enhance the verification to ensure that
each event's prevHash field matches the hash of the previous event in the
sequence, creating a continuous cryptographic chain. Modify the verification
logic to iterate through the events array and check that consecutive events are
properly linked together, in addition to the existing per-event signature
verification via verifyEvent.
In `@next-app/middleware.ts`:
- Around line 12-16: The RateLimiter instance created at module level
accumulates expired client keys without any cleanup mechanism, causing unbounded
memory growth. Implement a periodic cleanup routine by calling a sweep or
cleanup method on the limiter instance (likely a method like sweep() or
cleanup() on the RateLimiter class) at regular intervals using setInterval to
remove expired entries from the rate limiter's internal bucket storage.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e755ce6c-4632-4840-a427-cb6020b4be24
📒 Files selected for processing (18)
.github/workflows/runnable-assurance.ymlgovernance_artifacts/pilot/README.mdgovernance_artifacts/pilot/run_pilot_acceptance_gates.pygovernance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.mdgovernance_blueprint/roadmap_2026_2035.yamlnext-app/DASHBOARD_SECURITY_REVIEW.mdnext-app/__tests__/dashboard_security_review.test.tsnext-app/app/api/auth/login/route.tsnext-app/app/api/chat/stream/route.tsnext-app/app/api/consent/route.tsnext-app/app/api/intent/route.tsnext-app/app/api/risk/scores/route.tsnext-app/lib/auth/session.tsnext-app/lib/http/guard.tsnext-app/lib/http/rateLimit.tsnext-app/lib/privacy/consentLedger.tsnext-app/middleware.tsnext-app/next.config.js
✅ Files skipped from review due to trivial changes (3)
- next-app/next.config.js
- governance_artifacts/pilot/README.md
- next-app/DASHBOARD_SECURITY_REVIEW.md
🚧 Files skipped from review as they are similar to previous changes (6)
- governance_blueprint/roadmap_2026_2035.yaml
- next-app/app/api/intent/route.ts
- next-app/lib/auth/session.ts
- next-app/lib/http/guard.ts
- next-app/app/api/consent/route.ts
- next-app/app/api/chat/stream/route.ts
… assurance check)
Closes a real compliance-as-code integrity gap: the OSCAL control catalogs
carried machine-readable cross-references (tla-spec / rego-policy / circuit /
simulator props and regime #href links) that nothing verified, and the regime
links were in fact DANGLING (catalogs had no back-matter).
- governance_artifacts/oscal/oscal_conformance.py (new): for every control in
every catalog under oscal/, runs 8 falsifiable checks —
C1 OSCAL 1.1.2 structure (catalog/metadata/groups, id + statement part)
C2 feasibility-tier in {A,B,C,D}
C3 freshness-sla is a valid ISO-8601 duration (or P.../P... retest pair)
C4 tla-spec resolves to a real .tla module (handles Module::label)
C5 rego-policy resolves to a real declared package
C6 circuit logical id resolves via CIRCUIT_REGISTRY to a real .circom file
C7 simulator path exists on disk
C8 every internal #href resolves to a back-matter anchor (no dangling)
--json for machine-readable output; exit non-zero on any failure.
Result on repo catalogs: 43 passed, 0 failed across 2 catalogs.
- Both catalogs: added back-matter resources defining each regime anchor
(EU AI Act Art.12/14/15, DORA ICT-risk/resilience, Basel op-risk, NIST AI RMF
MEASURE, SR 11-7, plus Tier-C/D design fixtures clearly remarked as speculative),
so the previously-dangling regime links now resolve.
- run_runnable_assurance.sh: renumbered to 12 steps; new step 12 runs the
validator. Suite now 12/12 PASS.
- tests/governance/test_governance_artifacts.py: +2 tests — positive (repo
catalogs conform) and negative (a catalog with a dangling href / bad tla-spec /
bad tier / bad SLA fails with exit 1), proving the check is not vacuous.
- CI: unit-test job also runs the OSCAL pytest (-k oscal).
- Docs synced to 12/12: RUNNABLE_ASSURANCE.md (new row 12), DECADAL plan
(verification ledger + counts), pilot checklist P6-REPRO + README.
Tier A (in-repo cross-reference integrity). Does NOT assert the named regimes
are satisfied in production — only that the catalog's claims are internally
consistent and anchored to real, runnable artifacts.
Regression: assurance 12/12 PASS; pilot 6/6 automated PASS; governance pytest 12/12.
|
View changes in DiffLens |
Round 3 update — OSCAL catalog conformance (12th assurance check)Commit New artifact —
Result on the repo catalogs: 43 passed, 0 failed across 2 catalogs. Closing the dangling-reference gap honestly: both catalogs now carry Wired in:
Verification (all green before push):
Integrity note: Tier A — this verifies in-repo cross-reference integrity only. It does not assert the named regimes are satisfied in production; it asserts the catalog's claims are internally consistent and anchored to real, runnable artifacts. |
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| Compatibility | 2 medium 4 high |
| UnusedCode | 1 medium |
| BestPractice | 7 medium 6 minor 1 high |
| Documentation | 5 minor |
| ErrorProne | 7 high |
| CodeStyle | 61 minor |
| Complexity | 1 minor 1 critical 2 medium |
| Comprehensibility | 2 minor |
🟢 Metrics 211 complexity · 2 duplication
Metric Results Complexity 211 Duplication 2
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
|
View changes in DiffLens |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
governance_artifacts/run_runnable_assurance.sh (1)
129-134: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueStep 12 only checks exit status, not the expected output line.
Unlike Steps 5–7 which add
&& grep -q "..."as a content guard, Step 12 passes on a zero exit alone, then greps the message only for display. Since the validator returns non-zero on failure this is functionally safe, but for parity with the other content-asserting steps consider guarding on theOSCAL conformance:line too.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@governance_artifacts/run_runnable_assurance.sh` around lines 129 - 134, Step 12 in run_runnable_assurance.sh only verifies the Python command’s exit status and then uses grep just for reporting, unlike the earlier validation steps that also assert on the expected message. Update the OSCAL conformance check around the oscal_conformance.py invocation so it also guards on the presence of the “OSCAL conformance:” output line before calling pass, matching the pattern used in Steps 5–7 and keeping the check consistent with the rest of the script.governance_artifacts/oscal/oscal_conformance.py (1)
96-101: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value
_iso_duration_okaccepts empty/degenerate durations.
_ISO_DURmakes every component optional, so"PT"(and"P"inside a"P.../P..."pair, e.g."P/P90D") match. The explicitvalue == "P"guard only covers the whole, unsplit value, so degenerate parts in a periodic/retest pair slip through C3.♻️ Reject degenerate parts per-segment
def _iso_duration_ok(value: str) -> bool: - if value == "P": - return False - # Allow a "periodic/retest" pair like P1D/P90D. - parts = value.split("/") - return all(bool(_ISO_DUR.match(p)) for p in parts) and all(parts) + # Allow a "periodic/retest" pair like P1D/P90D; reject empty/degenerate parts. + parts = value.split("/") + return bool(parts) and all( + p not in ("", "P", "PT") and bool(_ISO_DUR.match(p)) for p in parts + )🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@governance_artifacts/oscal/oscal_conformance.py` around lines 96 - 101, The _iso_duration_ok helper currently lets degenerate ISO duration segments like PT or P inside a periodic/retest pair pass because it only special-cases the whole value and then checks the split parts with _ISO_DUR. Update _iso_duration_ok so each segment in the split value is validated as a non-empty, non-degenerate duration, not just matched against _ISO_DUR; use the existing _ISO_DUR and the _iso_duration_ok function to reject empty or bare-P/bare-PT parts in both single and paired forms.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@governance_artifacts/oscal/oscal_conformance.py`:
- Around line 96-101: The _iso_duration_ok helper currently lets degenerate ISO
duration segments like PT or P inside a periodic/retest pair pass because it
only special-cases the whole value and then checks the split parts with
_ISO_DUR. Update _iso_duration_ok so each segment in the split value is
validated as a non-empty, non-degenerate duration, not just matched against
_ISO_DUR; use the existing _ISO_DUR and the _iso_duration_ok function to reject
empty or bare-P/bare-PT parts in both single and paired forms.
In `@governance_artifacts/run_runnable_assurance.sh`:
- Around line 129-134: Step 12 in run_runnable_assurance.sh only verifies the
Python command’s exit status and then uses grep just for reporting, unlike the
earlier validation steps that also assert on the expected message. Update the
OSCAL conformance check around the oscal_conformance.py invocation so it also
guards on the presence of the “OSCAL conformance:” output line before calling
pass, matching the pattern used in Steps 5–7 and keeping the check consistent
with the rest of the script.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 99806dcb-3321-48b5-b5e5-26038d9914a6
📒 Files selected for processing (10)
.github/workflows/runnable-assurance.ymlgovernance_artifacts/RUNNABLE_ASSURANCE.mdgovernance_artifacts/oscal/catalog_sentinel_v24_env_rte.jsongovernance_artifacts/oscal/catalog_sentinel_v24_excerpt.jsongovernance_artifacts/oscal/oscal_conformance.pygovernance_artifacts/pilot/README.mdgovernance_artifacts/pilot/run_pilot_acceptance_gates.pygovernance_artifacts/run_runnable_assurance.shgovernance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.mdtests/governance/test_governance_artifacts.py
✅ Files skipped from review due to trivial changes (4)
- governance_artifacts/oscal/catalog_sentinel_v24_excerpt.json
- governance_artifacts/RUNNABLE_ASSURANCE.md
- governance_artifacts/pilot/README.md
- governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md
🚧 Files skipped from review as they are similar to previous changes (2)
- .github/workflows/runnable-assurance.yml
- governance_artifacts/pilot/run_pilot_acceptance_gates.py
…check)
Turns the now-verified OSCAL catalogs + live assurance evidence into an
auto-assembled EU AI Act Annex IV technical-documentation dossier — the
regulator deliverable the compliance-as-code stack was built to produce.
New artifacts:
- governance_artifacts/oscal/annex_iv_section_map.yaml: auditable bridge mapping
each Annex IV section (A-H) to the OSCAL control ids that evidence it, plus a
provider narrative. Control ids must exist in a catalog (no dangling refs).
- governance_artifacts/oscal/generate_annex_iv_dossier.py: assembles an
OSCAL-flavoured JSON dossier + human-readable Markdown. For each section it
resolves controls, pulls statement/tier/SLA/regime-citation/evidence-query,
and attaches LIVE evidence by running each control's backing assurance check
(TLA+ TLC, PQC WORM pytest, zk proof, routing simulator). Honesty model:
* SATISFIED only when a mapped control's runnable check passed in this run;
* PARTIAL when runnable-backed but not green this run;
* PENDING-EVIDENCE for organisational/hardware-dependent evidence (e.g.
env-02 enclave key custody, reported truthfully as n/a organisational).
Refuses to assemble on a non-conformant catalog or an unknown control id.
Embeds an integrity statement: assembly-integrity artifact, NOT a conformity
assessment; does not assert the institution is compliant.
Result on repo: 8/8 sections SATISFIED, catalog conformance 0 failures.
- governance_artifacts/oscal/generated/annex_iv_dossier.{json,md}: sample output.
- governance_artifacts/oscal/README.md: documents the OSCAL tooling + honesty model.
Wired in:
- run_runnable_assurance.sh: renumbered to 13 steps; step 13 verifies the dossier
assembles end-to-end (8 sections A-H, 0 conformance failures). Suite 13/13 PASS.
- tests/governance/test_governance_artifacts.py: +3 tests — all section-map
controls resolve; live-evidence assembly (SATISFIED implies a green check;
integrity statement disclaims conformity); --no-verify never fabricates
SATISFIED. Governance pytest 15/15.
- CI: unit-test job runs '-k "oscal or annex"'; new steps assemble the dossier
with live evidence and upload it as a build artifact (annex-iv-dossier).
- Docs synced to 13/13: RUNNABLE_ASSURANCE.md (new row 13 + count), DECADAL plan
(ledger + counts), pilot P6-REPRO + README.
Tier A (assembly integrity). Regression: assurance 13/13 PASS; pilot 6/6
automated; governance pytest 15/15.
Round 4 update — OSCAL-native Annex IV dossier generator (13th assurance check)Commit New artifacts
Honesty model (no overclaiming)
The generator refuses to assemble on a non-conformant catalog or an unknown control id, and embeds an integrity statement: assembly-integrity artifact, NOT a conformity assessment; does not assert the institution is compliant. Result on the repo: 8/8 sections SATISFIED, catalog conformance 0 failures. Wired in
Verification (green before push)
Integrity note: Tier A — assembly integrity. Proves the dossier is built only from real controls and currently-passing checks; it is not a conformity assessment. |
|
View changes in DiffLens |
1 similar comment
|
View changes in DiffLens |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/runnable-assurance.yml:
- Line 106: The workflow step using actions/upload-artifact is pinned to a
mutable tag, so update the runnable-assurance workflow to reference
actions/upload-artifact by an immutable commit SHA instead of v4. Locate the
upload step in the workflow and replace the current uses value with the specific
SHA for the same major version so the action reference cannot change
unexpectedly.
In `@governance_artifacts/oscal/generate_annex_iv_dossier.py`:
- Around line 179-185: The build_dossier flow currently loads catalog bodies via
_load_catalogs before checking OSCAL validity, so a malformed catalog can fail
early instead of using the validator report path. Update build_dossier to call
_run_conformance before _load_catalogs, then only hydrate catalogs/controls
after conformance passes; keep the existing control-loading logic and use the
build_dossier and _run_conformance symbols to locate the change.
In `@governance_artifacts/run_runnable_assurance.sh`:
- Around line 137-149: Step 13 is only checking dossier shape because
run_runnable_assurance.sh invokes generate_annex_iv_dossier.py with --no-verify,
so build_dossier() never exercises backing checks or live SATISFIED evidence.
Update this step to run the generator through the verified path and assert the
evidence/status fields from the resulting dossier, or if that is not intended,
adjust the step’s assertion/message and related RUNNABLE_ASSURANCE wording to
claim only assembly structure. Use the generate_annex_iv_dossier.py invocation
and the d["dossier"] assertions as the place to align the test with the
documented live-evidence behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 25d4b8f6-e081-4205-89b2-185c781b3312
⛔ Files ignored due to path filters (2)
governance_artifacts/oscal/generated/annex_iv_dossier.jsonis excluded by!**/generated/**governance_artifacts/oscal/generated/annex_iv_dossier.mdis excluded by!**/generated/**
📒 Files selected for processing (10)
.github/workflows/runnable-assurance.ymlgovernance_artifacts/RUNNABLE_ASSURANCE.mdgovernance_artifacts/oscal/README.mdgovernance_artifacts/oscal/annex_iv_section_map.yamlgovernance_artifacts/oscal/generate_annex_iv_dossier.pygovernance_artifacts/pilot/README.mdgovernance_artifacts/pilot/run_pilot_acceptance_gates.pygovernance_artifacts/run_runnable_assurance.shgovernance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.mdtests/governance/test_governance_artifacts.py
✅ Files skipped from review due to trivial changes (4)
- governance_artifacts/pilot/README.md
- governance_artifacts/oscal/annex_iv_section_map.yaml
- governance_artifacts/RUNNABLE_ASSURANCE.md
- governance_artifacts/oscal/README.md
🚧 Files skipped from review as they are similar to previous changes (1)
- governance_artifacts/pilot/run_pilot_acceptance_gates.py
| run: python3 governance_artifacts/oscal/generate_annex_iv_dossier.py | ||
|
|
||
| - name: Upload Annex IV dossier artifact | ||
| uses: actions/upload-artifact@v4 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major
🧩 Analysis chain
🏁 Script executed:
cat -n .github/workflows/runnable-assurance.yml | sed -n '100,115p'Repository: OneFineStarstuff/OneFineStarstuff.github.io
Length of output: 844
🏁 Script executed:
curl -sL "https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4" | jq -r '
if type == "object" and .object.sha then "\"actions/upload-artifact@\(.object.sha) # v4.4.3 (latest)\""
else "Could not resolve SHA for tag v4"
end
'Repository: OneFineStarstuff/OneFineStarstuff.github.io
Length of output: 266
🏁 Script executed:
curl -sL "https://api.github.com/repos/actions/upload-artifact/commits?sha=v4&per_page=1" | jq -r '.[0].sha | "actions/upload-artifact@\(.)"'Repository: OneFineStarstuff/OneFineStarstuff.github.io
Length of output: 246
Pin actions/upload-artifact to an immutable commit SHA.
The actions/upload-artifact reference on Line 106 uses a mutable tag (v4). Pinning to a specific SHA prevents reliance on mutable references in security-critical workflows.
🔒 Suggested fix
- name: Upload Annex IV dossier artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.4.3
with:
name: annex-iv-dossier
path: governance_artifacts/oscal/generated/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| uses: actions/upload-artifact@v4 | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.4.3 |
🧰 Tools
🪛 zizmor (1.26.1)
[error] 106-106: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/runnable-assurance.yml at line 106, The workflow step
using actions/upload-artifact is pinned to a mutable tag, so update the
runnable-assurance workflow to reference actions/upload-artifact by an immutable
commit SHA instead of v4. Locate the upload step in the workflow and replace the
current uses value with the specific SHA for the same major version so the
action reference cannot change unexpectedly.
Source: Linters/SAST tools
| def build_dossier(verify_evidence: bool = True) -> dict: | ||
| section_cfg = yaml.safe_load(SECTION_MAP.read_text()) | ||
| catalogs = section_cfg["catalogs"] | ||
| controls = _load_catalogs(catalogs) | ||
|
|
||
| conformance = _run_conformance() | ||
|
|
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Validate OSCAL conformance before loading catalog bodies.
Lines 180-182 load the referenced catalogs before Line 184 runs _run_conformance(). A structurally broken catalog will currently die out of _load_catalogs() instead of taking the documented “refuse non-conformant catalog” path with the validator report. Run conformance first, then hydrate controls.
Suggested fix
def build_dossier(verify_evidence: bool = True) -> dict:
section_cfg = yaml.safe_load(SECTION_MAP.read_text())
catalogs = section_cfg["catalogs"]
- controls = _load_catalogs(catalogs)
-
conformance = _run_conformance()
+ controls = _load_catalogs(catalogs)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| def build_dossier(verify_evidence: bool = True) -> dict: | |
| section_cfg = yaml.safe_load(SECTION_MAP.read_text()) | |
| catalogs = section_cfg["catalogs"] | |
| controls = _load_catalogs(catalogs) | |
| conformance = _run_conformance() | |
| def build_dossier(verify_evidence: bool = True) -> dict: | |
| section_cfg = yaml.safe_load(SECTION_MAP.read_text()) | |
| catalogs = section_cfg["catalogs"] | |
| conformance = _run_conformance() | |
| controls = _load_catalogs(catalogs) |
🧰 Tools
🪛 GitHub Check: CodeFactor
[notice] 179-179: governance_artifacts/oscal/generate_annex_iv_dossier.py#L179
Missing function or method docstring (missing-function-docstring)
[notice] 179-179: governance_artifacts/oscal/generate_annex_iv_dossier.py#L179
Too many local variables (19/15) (too-many-locals)
🪛 Pylint (4.0.6)
[refactor] 179-179: Too many local variables (19/15)
(R0914)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance_artifacts/oscal/generate_annex_iv_dossier.py` around lines 179 -
185, The build_dossier flow currently loads catalog bodies via _load_catalogs
before checking OSCAL validity, so a malformed catalog can fail early instead of
using the validator report path. Update build_dossier to call _run_conformance
before _load_catalogs, then only hydrate catalogs/controls after conformance
passes; keep the existing control-loading logic and use the build_dossier and
_run_conformance symbols to locate the change.
| echo "[13/13] Annex IV dossier auto-assembly (8 sections from conformant catalog)" | ||
| # --no-verify: steps 1-12 already prove the backing checks pass; here we verify | ||
| # the dossier assembles end-to-end from real controls with 0 conformance failures | ||
| # and exactly the eight Annex IV sections (no dangling control refs). | ||
| if python3 "$GA/oscal/generate_annex_iv_dossier.py" --no-verify --print >/tmp/dossier_out 2>/tmp/dossier_err \ | ||
| && python3 -c ' | ||
| import json | ||
| d = json.load(open("/tmp/dossier_out"))["dossier"] | ||
| assert d["catalog_conformance"]["failed"] == 0, "catalog not conformant" | ||
| assert d["summary"]["sections_total"] == 8, "expected 8 Annex IV sections" | ||
| assert [s["id"] for s in d["sections"]] == list("ABCDEFGH"), "section ids drift" | ||
| '; then | ||
| pass "Annex IV dossier assembles: 8 sections, catalog conformance 0 failures" |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Step 13 never exercises the live-evidence path.
Lines 141-148 call the generator with --no-verify, so build_dossier() does not run backing checks and cannot produce live SATISFIED evidence states. The assertions here only validate shape/counts, which means this step does not actually prove the “live evidence” behavior described in governance_artifacts/RUNNABLE_ASSURANCE.md and the blueprint ledger. Either run the generator without --no-verify and assert the resulting statuses, or narrow the documented claim to assembly-structure only.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@governance_artifacts/run_runnable_assurance.sh` around lines 137 - 149, Step
13 is only checking dossier shape because run_runnable_assurance.sh invokes
generate_annex_iv_dossier.py with --no-verify, so build_dossier() never
exercises backing checks or live SATISFIED evidence. Update this step to run the
generator through the verified path and assert the evidence/status fields from
the resulting dossier, or if that is not intended, adjust the step’s
assertion/message and related RUNNABLE_ASSURANCE wording to claim only assembly
structure. Use the generate_annex_iv_dossier.py invocation and the d["dossier"]
assertions as the place to align the test with the documented live-evidence
behavior.
Summary
Adds the authoritative consolidated decadal (2026–2035) strategic & technical plan for deploying the Sentinel AI Governance Stack v2.4, Omni-Sentinel Mesh v4.0, and Unified AI Supervisory Control Plane (SCP v3.0) across G-SIFIs and Fortune 500 financial institutions.
governance_blueprint/DECADAL_STRATEGIC_TECHNICAL_PLAN_2026_2035.md(424 lines, 20 sections).Builds on merged PR #138. Every technical claim is anchored to a runnable, verified in-repo artifact — the assurance suite is 11/11 PASS at issue.
Coverage (all requested topics)
omni_sentinel_24h_monitor.py24h monitoring + integrity; OmegaActual dead-man's switch; DevSecOps/GitOps (ArgoCD/Flux)Integrity discipline
A/B/C/D feasibility tiering throughout. Explicit statement that ASI containment is modelled as a formally-checked control discipline, not a safety proof for arbitrarily capable agents (Tier D). Live attestation/HSM/enclave verified at IaC/policy layer (Tier B). All cross-referenced files confirmed present; roadmap YAML parses (5 phases + 4 extension).
Verification
Summary by CodeRabbit
Documentation
New Features
/api/*rate limiting.Bug Fixes
Tests / CI